
/**
 * 聊天消息种类类型定义
 */
export const MessageType = {
    /** 文本消息 */
    TEXT: 0,
    /** 图片消息 */
    IMAGE: 1,
    /** 文件消息 */
    FILE: 2,
    /** 视频消息 */
    VIDEO: 3,
    /** 音频消息 */
    AUDIO: 4,
    /** 语音消息 */
    VOICE: 5,
    /** 语音通话消息 */
    REAL_VIDEO: 6,
    /** 视频通话消息 */
    REAL_AUDIO: 7,
    /** 用户信息/名片消息(可用于被添加好友) */
    USER: 8,
    /** 表情包消息 */
    EMOJI: 9
} as const;

export type MessageType = (typeof MessageType)[keyof typeof MessageType];

/**
 * 聊天消息状态定义
 */
export const MessageStatus = {
    /** 消息发送中 */
    SENDING: 0,
    /** 消息发送成功 */
    SENT: 1,
    /** 消息发送失败 */
    FAILED: 2,
} as const;

export type MessageStatus = (typeof MessageStatus)[keyof typeof MessageStatus];

/**
 * 聊天用户信息
 */
export interface ChatUser {
    /** 用户ID */
    id: string;
    /** 发送者名称 */
    name: string;
    /** 发送者头像 */
    avatar: string;
    /** 更新时间戳 */
    updateTime: number;
}

export interface ChatGroup {

}

/**
 * 聊天会话信息
 */
export interface ChatReply<T> {
    /** 被回复的消息ID */
    replyMessageId: string;
    /** 被回复的发送者名称 */
    replyUserName: string;
    /** 被回复的消息负载json字符串 */
    replyContent: T;
    /** 被回复的消息的消息类型 */
    replyMessageType: MessageType;
    /** 被回复的消息的撤回状态 */
    replyRevokeStatus: boolean;
}

/**
 * 聊天消息类型
 */
export interface ChatMessage<T,P> {
    /** 消息ID */
    messageId: string;
    /** 会话ID */
    sessionId: string;
    /** 消息所属用户 */
    user: ChatUser;
    /** 消息类型 */
    messageType: MessageType;
    /** 消息负载json字符串 */
    content: T;
    /** 是否已撤回 */
    revokeStatus: boolean; // 撤回状态 0未撤回 1已撤回
    /** 是否为系统消息*/
    system: boolean;
    /** 发送状态 */
    status: MessageStatus;
    /** 回复信息 */
    reply?: ChatReply<P>;
    /** 发送时间 */
    createTime: number;
}

/**
 * 聊天时间线分组类型
 */
 export type ChatMessageOrTimeLine =
    | { type: 'timeline'; timestamp: number }
    | { type: 'message'; data: ChatMessage<any, any> };

/**
 * 聊天消息媒体文件URL类型
 */
export type ChatMessageMediaData = {
    messageId: string;
    /** 媒体文件URL */
    url: string;
    /** 媒体文件类型 */
    type: MessageType;
 }

/**
 * 聊天消息查询类型
 */
export interface ChatMessageQuery {
    sessionId: string;
    ownerId: string;
    lastTime?: number | null;
    pageSize?: number;
}

/**
 * 聊天消息删除类型
 */
export interface ChatMessageDelete {
    messageId: string;
    ownerId: string;
}

/**
 * 聊天消息批量删除类型
 */
export interface ChatMessageBatchDelete {
    sessionId: string;
    ownerId: string;
}

/**
 * 聊天消息创建类型
 */
export interface ChatMessageCreate<T ,P > extends ChatMessage<T, P> {
    ownerId: string; // 消息所有者ID
}

/**
 * 聊天消息更新类型
 */
export interface ChatMessageUpdate {
    messageId: string;
    ownerId: string;
    content?: any; // 消息内容
    status?: MessageStatus;
    revokeStatus?: boolean;
}
